package com.java2_20;

import com.java2_20_1.XiaoStudent;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Objects;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class java2_20 extends Student {
    //    public static void main(String[] args) {
//
//        Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//        System.out.println(Arrays.toString(arr));
//        System.out.println(Arrays.binarySearch(arr, 7));
//        Arrays.copyOf(arr,10);
//        Arrays.copyOfRange(arr,1,5);
//        Arrays.fill(arr,100);
//
//
//        Arrays.sort(arr, new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o1 - o2;
//            }
//        });
//
//    }
//    public static void main(String[] args) {
//
//
//
//        Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//        Arrays.sort(arr,(Integer o1, Integer o2) -> {
//                return o1 - o2;
//            }
//        );
//
//    }
//    public static void Fun(Predicate<String> predicate){
//
//    }
//    public static void main(String[] args) {
//        //将数组以字符串的形式打印出来
////        System.out.println(Arrays.toString(arr));
////
////        //查找数
////        int ret = Arrays.binarySearch(arr, 3);
////        //没有插入位置-1
////        int ret1 = Arrays.binarySearch(arr, 8);
////        System.out.println(ret);
////        System.out.println(ret1);
//        //刚好
////        int[] arr2 = Arrays.copyOf(arr, 10);
////        for (int i = 0; i < arr2.length; i++) {
////            System.out.print(arr2[i] + " ");
////        }
//        //超出默认值
////        int[] arr2 = Arrays.copyOf(arr, 20);
////        for (int i = 0; i < arr2.length; i++) {
////            System.out.print(arr2[i] + " ");
////        }
//        //缺少截断
////        int[] arr2 = Arrays.copyOf(arr, 5);
////        for (int i = 0; i < arr2.length; i++) {
////            System.out.print(arr2[i] + " ");
////        }
//
//        //开始 + 结束
////        int[] arr = {1, 2, 3, 4, 5, 6, 7, 20, 9, 10};
////        int[] arr2 = Arrays.copyOfRange(arr, 4, 9);
////        for (int i = 0; i < arr2.length; i++) {
////            System.out.print(arr2[i] + " ");
////        }
//
//
//    }
//    public static void main(String[] args) {
//
////        int[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
//        //填充数组
////        Arrays.fill(arr,0);
////        for (int i = 0; i < arr.length; i++) {
////            System.out.print(arr[i] + " ");
////        }
//
//        //排序数组（默认）
////         Arrays.sort(arr);
////        for (int i = 0; i < arr.length; i++) {
////            System.out.print(arr[i] + " ");
////        }
//
//        //排序数组  --  要改成包装类
////        Integer[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
////        //实现一个接口并对其的compare进行重写
////        Arrays.sort(arr, new Comparator<Integer>() {
////            @Override
////            public int compare(Integer o1, Integer o2) {
////                return o2 - o1;
////            }
////        });
////        for (int i = 0; i < arr.length; i++) {
////            System.out.print(arr[i] + " ");
////        }
//
//
//
//
//    }
//    public static void main(String[] args) {
//        //Lambda表达式
//        Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
////        Arrays.sort(arr, new Comparator<Integer>() {
////            @Override
////            public int compare(Integer o1, Integer o2) {
////                return o1 - o2;
////            }
////        });
//
//        //简化之后的
////        Arrays.sort(arr,(o1, o2) -> o2 - o1);
////        for (int i = 0; i < arr.length; i++) {
////            System.out.print(arr[i] + " ");
////        }
//
//
//    }
//    public static void main(String[] args) {
//        getMax(new Supplier<Integer>() {
//            @Override
//            public Integer get() {
//                int[] arr = {1, 2, 6, 3, 8, 4, 9, 5, 10, 7};
//                Arrays.sort(arr);
//                return arr[arr.length - 1];
//            }
//        });
//    }
//
//    public static void getMax(Supplier<Integer> supplier) {
//        Integer ret = supplier.get();
//        System.out.println(ret);
//    }
//    public static void main(String[] args) {
//        int max = getMax(() -> {
//                    int[] arr = {1, 3, 2, 5, 4, 10, 6, 9, 7, 8};
//                    Arrays.sort(arr);
//                    return arr[arr.length - 1];
//                }
//        );
//        System.out.println(max);
//
//
//    }
//
//    public static int getMax(Supplier<Integer> supplier) {
//        return supplier.get();
//    }
//    public static void main(String[] args) {
//        bigXie(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                String upperCase = s.toUpperCase();
//                System.out.println(upperCase);
//            }
//        });
//    }
//    public static void bigXie(Consumer<String> consumer){
//        consumer.accept("Hello World");
//    }
//    public static void main(String[] args) {
//        bigXie((String s) -> {
//                    String upperCase = s.toUpperCase();
//                    System.out.println(upperCase);
//                }
//        );
//
//    }
//
//    public static void bigXie(Consumer<String> consumer) {
//        consumer.accept("hello world");
//    }
//    public static void main(String[] args) {
//        changeXie(new Consumer<String>() {
//                      @Override
//                      public void accept(String s) {
//                          String upperCase = s.toUpperCase();
//                          System.out.println(upperCase);
//                      }
//                  }, (String s) -> {
//                    String lowerCase = s.toLowerCase();
//                    System.out.println(lowerCase);
//                }
//        );
//    }
//
//    public static void changeXie(Consumer<String> consumer1, Consumer<String> consumer2) {
//        String str = "Hello World";
////        consumer1.accept(str);
////        consumer2.accept(str);
//        consumer1.andThen(consumer2).accept(str);
//    }
//    public static void main(String[] args) {
//        changeArr(new Function<int[], String>() {
//            @Override
//            public String apply(int[] ints) {
//                return Arrays.toString(ints);
//            }
//        });
//
//
//    }
//
//    public static void changeArr(Function<int[], String> function) {
//        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//        System.out.println(function.apply(arr));
//    }
//    public static void main(String[] args) {
//        getArrString(ints -> Arrays.toString(ints));
//    }
//
//    public static void getArrString(Function<int[], String> function) {
//        int[] arr = {1, 2, 3, 4, 5};
//        System.out.println(function.apply(arr));
//    }
//    public static void main(String[] args) {
//        getNum(arr -> {
//            Arrays.sort(arr, (o1, o2) -> o2 - o1);
//            return arr[arr.length - 1];
//        }, num -> num * 10);
//
//    }
//
//    public static void getNum(Function<Integer[], Integer> function1, Function<Integer, Integer> function2) {
//        Integer[] arr = {4, 2, 1, 3, 5, 6, 10, 9, 7, 8};
////        Integer num = function1.apply(arr);
////        System.out.println(function2.apply(num));
//        System.out.println(function1.andThen(function2).apply(arr));
//    }
//    public static void main(String[] args) {
//        isBig(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                return s.length() > 3;
//            }
//        }, new Predicate<int[]>() {
//            @Override
//            public boolean test(int[] ints) {
//                return ints.length > 5;
//            }
//        });
//    }
//
//    public static void isBig(Predicate<String> predicate1, Predicate<int[]> predicate2) {
//        int[] arr = new int[10];
////        boolean b1 = predicate1.test("coco");
////        boolean b2 = predicate2.test(arr);
////        if(b1 && b2){
////            System.out.println("Ok");
////        }
//        //and or negate
//        // 两个的接收值必须一样
//        //predicate1.and(predicate2)
//    }
//    public static void main(String[] args) {
//        //protected -- 作用范围：本类，同包，子类
//        Student s = new Student();
//        //
////        s.setAge(17);
////        System.out.println(s.getAge());
//
////        int age = 19;
////        System.out.println(age);
//
//    }
//    public static void main(String[] args) {
//        XiaoStudent x = new XiaoStudent();
//        x.show();
//
//
//
//
//    }
//    public static void main(String[] args) throws CloneNotSupportedException {
//        People p1 = new People("zhangsan",20,'男');
////        //浅克隆
////        People p2 = (People)p1.clone();
////        System.out.println(p2.toString());
//
//        //深克隆
//        People p2 = (People) p1.clone();
//        System.out.println(p2.toString());
//
//        //深浅克隆的区别
    /**
     * 浅克隆克隆地址
     * 深克隆创建一个新的
     * */
//    }
    public static void main(String[] args) {
        People p1 = new People("zhangsan",20,'男');
        People p2 = new People("zhangsan", 20, '男');

        boolean ret = Objects.equals(p1, p2);
        System.out.println(ret);

        int[] arr = null;
        System.out.println(Objects.isNull(arr));
        System.out.println(Objects.nonNull(arr));

    }


}
